/**
 * Shiro JS库
 * @author Assassin
 */

// gt
var shiro = shiro || {
	extend : function(target, source){
  		for (var p in source) {
        	if(source.hasOwnProperty(p)) {
	            target[p] = source[p];
	        }
	    }
	}
};

// shiro_util
shiro.extend(shiro.util || (shiro.util = {}), {
	
	/**
	 * trim方法
	 * @param str 输入字符串
	 */
	trim : function(str) {
		return str.replace(/(^\s*)|(\s*$)/g,'');
	},

	/**
	 * 格式化日期（默认为当前日期）
	 * @param format 日期格式
	 * @param timestamp 时间戳
	 */
	formatDate : function(format, timestamp) {
		var today = null;
		if(typeof(timestamp) == 'undefined' || timestamp == null) {
			today = "-";
			return today;
		} else {
			today = new Date(parseInt(timestamp));
		}
		var year = today.getFullYear();
		var month = (today.getMonth() + 1) <=9 ? ('0' + (today.getMonth() + 1)) : (today.getMonth() + 1);
		var date = today.getDate() <= 9 ? ('0' + today.getDate()) : today.getDate();
		var hour = today.getHours() <= 9 ? ('0' + today.getHours()) : today.getHours();
		var minute = today.getMinutes() <= 9 ? ('0' + today.getMinutes()) : today.getMinutes();
		var second = today.getSeconds() <= 9 ? ('0' + today.getSeconds()) : today.getSeconds();
		return format.replace('yyyy', year).replace('MM', month).replace('dd', date).replace('HH', hour).replace('mm', minute).replace('ss', second);
	},
	
	/**
	 * 格式化表格数据（为空替换为-或其他字符）
	 * @param format 格式字符串
	 * @data 表格数据
	 */
	formatTableData : function(format, data) {
		var result = '';
        if(typeof(data) == 'undefined' || data == null || data == 'null' || data.toString().replace(/(^\s*)|(\s*$)/g,'') == '') {
            return format;
        } else {
            return data;
        }

	},

    /**
     * 格式化数据，超过指定字符数显示为省略号
     * @param len 限制长度
     * @data 表格数据
     */
    formatEllipsis : function(len, data) {
        var result = '';
        if(typeof(data) == 'undefined' || data == null || data.replace(/(^\s*)|(\s*$)/g,'') == '') {
            return format;
        } else {
        	if(data.length > len) {
                return data.substring(0, len) + '……';
			} else {
        		return data;
			}

        }
    },

	/**
	 * 判断字符串是否为空（空包含：Null、Trim后的空串、undefined）
	 * @param str 输入字符串
	 */
	isEmpty : function(str) {
		if(typeof(str) == 'undefined' || str == null || str.replace(/(^\s*)|(\s*$)/g,'') == '') {
			return true;
		} else {
			return false;
		}
	},

	/**
	 * 判断字符串是否为空串（单一空串，未trim）
	 * @param str 输入字符串
	 */
	isBlank : function(str) {
		if(typeof(str) != 'undefined' && str == '') {
			return true;
		} else {
			return false;
		}
	},

	/**
	 * 判断字符串是否为空串（多个空串，已trim）
	 * @param str 输入字符串
	 */
	isTrimBlank : function(str) {
		if(typeof(str) != 'undefined' && str.replace(/(^\s*)|(\s*$)/g,'') == '') {
			return true;
		} else {
			return false;
		}
	}
});

// shiro_form
shiro.extend(shiro.form || (shiro.form = {}), {
	
	/**
	 * 获取表单单选按钮选中的值
	 * @param radioName 单选按钮name
	 */
	getRadioValue : function(radioName) {
		var radioArray = document.getElementsByName(radioName);
		if(typeof(radioArray) == 'undefined' || radioArray == null) {
			return null;
		} else {
			for(var i = 0; i < radioArray.length; i++) {
				if(radioArray[i].checked) {
					return radioArray[i].value;
					break;
				}
			}
		}
	},

	/**
	 * 设置表单单选按钮选中
	 * @param radioName 单选按钮name
	 * @param radioValue 单选按钮值
	 */
	setRadioValue : function(radioName, radioValue) {
		var radioArray = document.getElementsByName(radioName);
		if(typeof(radioArray) == 'undefined' || radioArray == null) {
			return;
		} else {
			for(var i = 0; i < radioArray.length; i++) {
				if(radioArray[i].value == radioValue) {
					radioArray[i].checked = true;
					break;
				}
			}
		}
	},

	/**
	 * 获取表单下拉列表框选中的值
	 * @param selectId 下拉列表框Id
	 */
	getSelectedValue : function(selectId) {
		var selectObj = document.getElementById(selectId);
		if(typeof(selectObj) == 'undefined' || selectObj == null) {
			return null;
		} else {
			return selectObj.value;
		}
	},

	/**
	 * 获取表单下拉列表框选中的文本
	 * @param selectId 下拉列表框Id
	 */
	getSelectedText : function(selectId) {
		var selectObj = document.getElementById(selectId);
		if(typeof(selectObj) == 'undefined' || selectObj == null) {
			return null;
		} else {
			return selectObj.options[selectObj.selectedIndex].text;
		}
	},

	/**
	 * 设置表单下拉列表框选中
	 * @param selectId 下拉列表框Id
	 * @param selectValue 下拉列表框值
	 */
	setSelectedValue : function(selectId, selectValue) {
		var selectObj = document.getElementById(selectId);
		if(typeof(selectObj) == 'undefined' || selectObj == null) {
			return;
		} else {
			selectObj.value = selectValue;
		}
	},

	/**
	 * 设置表单下拉列表框选中
	 * @param selectId 下拉列表框Id
	 * @param selectText 下拉列表框文本
	 */
	setSelectedText : function(selectId, selectText) {
		var selectObj = document.getElementById(selectId);
		if(typeof(selectObj) == 'undefined' || selectObj == null) {
			return;
		} else {
			for(var i = 0; i < selectObj.options.length; i++) {
				if(selectObj.options[i].text == selectText) {
					selectObj.options[i].selected = true;
					break;
				}
			}
		}
	},
	
	/**
	 * 设置复选框全选
	 * @param checkboxName 复选框name属性名称
	 */
	setCheckBoxSelectAll : function(checkboxName) {
		var checkboxArray = document.getElementsByName(checkboxName); 
		for(var i = 0; i < checkboxArray.length; i++) {
			checkboxArray[i].checked = true
		}
	},
	
	/**
	 * 设置复选框交替选中
	 * @param checkboxName 复选框name属性名称
	 */
	setCheckBoxSelectToggle : function(checkboxName) {
		var checkboxArray = document.getElementsByName(checkboxName); 
		for(var i = 0; i < checkboxArray.length; i++) {
			checkboxArray[i].checked = !checkboxArray[i].checked;
		}
	},
	
	/**
	 * 获取选中的复选框的值集合
	 * @param checkboxName 复选框name属性名称
	 */
	getCheckBoxSelectValues : function(checkboxName) {
		var vals = new Array();
		var checkboxArray = document.getElementsByName(checkboxName); 
		for(var i = 0; i < checkboxArray.length; i++) {
			if(checkboxArray[i].checked) {
				vals.push(checkboxArray[i].value);
			}
		}
		return vals;
	},

	/**
	 * 验证是否为数字
	 * @param str 输入字符串
	 */
	isNumber : function(str) {
		if(shiro.util.isEmpty(str)) {
			return false;
		} else {
			return !isNaN(str);
		}
	},

	/**
	 * 验证电子邮箱格式
	 * @param str 输入字符串
	 */
	isEmail : function(str) {
		if(shiro.util.isEmpty(str)) {
			return false;
		} else {
			return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(str);
		}
	},

	/**
	 * 验证汉字格式
	 * @param str 输入字符串
	 */
	isCharacter : function(str) {
		if(shiro.util.isEmpty(str)) {
			return false;
		} else {
			return /^[\u4e00-\u9fa5]{0,}$/.test(str);
		}
	},

	/**
	 * 验证手机号码格式
	 * @param str 输入字符串
	 */
	isTelphone : function(str) {
		if(shiro.util.isEmpty(str)) {
			return false;
		} else {
			return /^[1][0-9]{10}$/.test(str);
		}
	}
});

// 重写Jquery Ajax->shiro_ajax
(function($) {
    var _ajax = $.ajax;
    var loaddingIndex;
    shiro.ajax = function(opt) {
        var fn = {
        	url: shiro.baseUrl,
    		type : 'post',
        	dataType : 'json',
        	async : true,
    		cache : false,
    		timeout : 30000,
            error: function(XMLHttpRequest, textStatus, errorThrown) {},
            success: function(data, textStatus) {}
        }
        if(opt.url) {
        	fn.url  += opt.url;
        }
        if(opt.type) {
        	fn.type  = opt.type;
        }
        if(opt.dataType) {
        	fn.dataType  = opt.dataType;
        }
        if(opt.async != 'undefined') {
        	fn.async  = opt.async;
        }
        if(opt.cache) {
        	fn.cache  = opt.cache;
        }
        if(opt.timeout) {
        	fn.timeout  = opt.timeout;
        }
        if (opt.error) {
            fn.error = opt.error;
        }
        if (opt.success) {
            fn.success = opt.success;
        }
        var _opt = $.extend(opt, {
        	url : fn.url,
        	type : fn.type,
        	dataType : fn.dataType,
        	async : fn.async,
    		cache : fn.cache,
    		timeout : fn.timeout,
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                fn.error(XMLHttpRequest, textStatus, errorThrown);
                var status = XMLHttpRequest.status;
                if(status == '0') {
                    setTimeout(function(){},300);
                	// layer.msg('服务器未启动', {icon: 5});
                } else if(status == '400') {
                	layer.msg('参数错误', {icon: 5});
                } else if(status == '403') {
                	layer.msg('禁止访问', {icon: 5});
                } else if(status == '404') {
                	layer.msg('找不到服务器', {icon: 5});
                } else if(status == '405') {
                	layer.msg('请求方法不允许', {icon: 5});
                } else if(status == '500') {
                	layer.msg('内部服务器错误', {icon: 5});
                } else if(status == '502') {
                	layer.msg('服务器网关无响应', {icon: 5});
                } else if(status == '503') {
                	layer.msg('服务器不可用', {icon: 5});
                } else if(status == '504') {
                	layer.msg('服务器网关超时', {icon: 5});
                } else if(status == '200') {
                	console.log('respStatus');
                } else {
                	layer.msg('未知错误', {icon: 5});
                }
            },
            success: function(data, textStatus) {
                fn.success(data, textStatus);
            },
            beforeSend:function(XHR){
                loaddingIndex = layer.load(2, {content: '数据处理中,请稍候...', shade: false, success: function(layero) {
            		layero.find('.layui-layer-content').css('padding-top', '40px').css('font-size', '11px').css('width', '100%').css('text-indent', '-30px');
                }});
			},
			complete:function(XHR, TS){
				var sessionStatus = XHR.getResponseHeader('sessionStatus');
				var sessionUrl = XHR.getResponseHeader('sessionUrl');
				if(sessionStatus == 'timeOut') {
					layer.alert('由于长时间没有操作，您的Session已经超时', {title:'系统提示', closeBtn:0, btnAlign:'c',icon:5,btn:['重新登录']},function(index){
                		window.top.location.href = shiro.baseUrl + '/' + sessionUrl;
    				});
				}
				if(sessionStatus == 'reLogin') {
					layer.alert('该操作需要身份验证，请重新登录', {title:'系统提示', closeBtn:0, btnAlign:'c',icon:5,btn:['重新登录']},function(index){
                		window.top.location.href = shiro.baseUrl + '/login.action';
    				});
				}
				var kickoutStatus = XHR.getResponseHeader('kickoutStatus');
				if(kickoutStatus == 'kickout') {
					layer.alert('您的账号已经在其他地方登录', {title:'系统提示', closeBtn:0, btnAlign:'c',icon:5,btn:['重新登录']},function(index){
                		window.top.location.href = shiro.baseUrl + '/login.action';
    				});
				}
				var unauthorizedStatus = XHR.getResponseHeader('unauthorizedStatus');
				if(unauthorizedStatus == 'unauthorized') {
					layer.alert('您的账号没有该操作权限，请切换登录账号', {title:'系统提示', closeBtn:0, btnAlign:'c',icon:5,btn:['重新登录']},function(index){
                		window.top.location.href = shiro.baseUrl + '/login.action';
    				});
				}
				layer.close(loaddingIndex);
			}
        });
        _ajax(_opt);
    };
})(jQuery);